home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / menukuru / menukuru.c next >
C/C++ Source or Header  |  1994-06-01  |  5KB  |  178 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <malloc.h>
  5. #include <msdos.cf>
  6. #include <mos.h>
  7. #include <egb.h>
  8. #include <sidework.h>
  9.  
  10. #define    ui    unsigned int
  11.  
  12. #define    FILLUP        for( i = 0; i < _lupy; i++ ){                            \
  13.                         _movedata( ds, ( ui )fill, seg, i * vxbyte, xbyte );\
  14.                     }
  15.  
  16. #define    FILLDOWN    for( i = _lupy + c; i <= 479; i++ ){                    \
  17.                         _movedata( ds, ( ui )fill, seg, i * vxbyte, xbyte);    \
  18.                     }
  19.  
  20. #define    NOMDSP( jg )    FILLUP;                                                \
  21.                     for( i = 0, c = 0; i < 480; i++ ){                        \
  22.                         if( jg ){                                            \
  23.                             _movedata( ds, ( ui )p + i * xbyte,                \
  24.                             seg, ( _lupy + c++ ) * vxbyte, xbyte);            \
  25.                         }                                                    \
  26.                     }                                                        \
  27.                     FILLDOWN;
  28.  
  29. #define    REVDSP( jg )    FILLUP;                                                \
  30.                     for( i = 0, c = 0; i < 480; i++ ){                        \
  31.                         if( jg ){                                            \
  32.                             _movedata                                        \
  33.                             ( ds, ( ui )p + ((( 480 - 1 ) - i) * xbyte),    \
  34.                             seg, ( _lupy + c++ ) * vxbyte, xbyte);            \
  35.                         }                                                    \
  36.                     }                                                        \
  37.                     FILLDOWN;
  38.  
  39. int
  40. main()
  41. {
  42.     char    *p, fill[ 640 ], mwork[ 4096 ];
  43.     int        xbyte,vxbyte,seg;
  44.  
  45.     int        ds,i,c,_lupy,b,x,y,exitf = 0;
  46.     int        page0,page1,sdk = 0;
  47.  
  48.     EGB_getResolution( &page0, &page1 );
  49.  
  50.     switch( page0 ){
  51.     case    12:
  52.         if( NULL == ( p = malloc( 640 * 480 ))){
  53.             sdk_start( 75 );
  54.             sdk = 1;
  55.             if( NULL == ( p = malloc( 640 * 480 )))return 1;
  56.         }
  57.         xbyte = 640;
  58.         seg = 0x10C;
  59.         vxbyte = 1024;
  60.         break;
  61.     case    3:
  62.         if( NULL == ( p = malloc( 640 * 480 / 2 ))){
  63.             sdk_start( 38 );
  64.             sdk = 1;
  65.             if( NULL == ( p = malloc( 640 * 480 / 2 )))return 1;
  66.         }
  67.         xbyte = 320;
  68.         seg = 0x104;
  69.         vxbyte = 512;
  70.         break;
  71.     default:
  72.         return 1;
  73.     }
  74.  
  75.     if( p == NULL )return 1;
  76.  
  77.     MOS_start( mwork, 4096 );
  78.  
  79.     ds = getds();
  80.  
  81.     for( i = 0; i < 480; i++ ){
  82.         _movedata( seg, i * vxbyte, ds, ( ui )p + i * xbyte, xbyte );
  83.     }
  84.  
  85.     memset( fill, 0, sizeof( fill ));
  86.  
  87.     do{
  88.         for( i = 0; i < 480; i++ ){                /* 正常な絵を書く        */
  89.             _movedata( ds, ( int )p + i * xbyte, seg, i * vxbyte, xbyte);
  90.         }
  91.         if( exitf )break;
  92.  
  93.         _lupy = 240 - (( 480 * 11 / 12 ) >> 1);
  94.         NOMDSP( i % 12 );
  95.         MOS_rdpos( &b,&x,&y );exitf |= b;
  96.         _lupy = 240 - ((480 * 10 / 12) >> 1);
  97.         NOMDSP(i % 6);
  98.         _lupy = 240 - ((480 * 9 / 12) >> 1);
  99.         NOMDSP(i % 4);
  100.         _lupy = 240 - ((480 * 8 / 12) >> 1);
  101.         NOMDSP(i % 3);
  102.         MOS_rdpos( &b,&x,&y );exitf |= b;
  103.         _lupy = 240 - ((480 * 6 / 12) >> 1);
  104.         NOMDSP(i % 2);
  105.         _lupy = 240 - ((480 * 4 / 12) >> 1);
  106.         NOMDSP(!(i % 3));
  107.         _lupy = 240 - ((480 * 2 / 12) >> 1);
  108.         NOMDSP(!(i % 6));
  109.         MOS_rdpos( &b,&x,&y );exitf |= b;
  110.         _lupy = 240 - ((480 * 1 / 12) >> 1);
  111.         REVDSP(!(i % 12));
  112.         _lupy = 240 - ((480 * 2 / 12) >> 1);
  113.         REVDSP(!(i % 6));
  114.         _lupy = 240 - ((480 * 4 / 12) >> 1);
  115.         REVDSP(!(i % 3));
  116.         MOS_rdpos( &b,&x,&y );exitf |= b;
  117.         _lupy = 240 - ((480 * 6 / 12) >> 1);
  118.         REVDSP(i % 2);
  119.         _lupy = 240 - ((480 * 8 / 12) >> 1);
  120.         REVDSP(i % 3);
  121.         _lupy = 240 - ((480 * 9 / 12) >> 1);
  122.         REVDSP(i % 4);
  123.         MOS_rdpos( &b,&x,&y );exitf |= b;
  124.         _lupy = 240 - ((480 * 10 / 12) >> 1);
  125.         REVDSP(i % 6);
  126.         _lupy = 240 - ((480 * 11 / 12) >> 1);
  127.         REVDSP(i % 12);
  128.         MOS_rdpos( &b,&x,&y );exitf |= b;
  129.         for(i = 0; i < 480; i++){
  130.             _movedata( ds, ( ui )p + ((( 480 - 1 ) - i) * xbyte ),
  131.                 seg, i * vxbyte, xbyte );
  132.         }
  133.         _lupy = 240 - ((480 * 11 / 12) >> 1);
  134.         REVDSP(i % 12);
  135.         _lupy = 240 - ((480 * 10 / 12) >> 1);
  136.         REVDSP(i % 6);
  137.         MOS_rdpos( &b,&x,&y );exitf |= b;
  138.         _lupy = 240 - ((480 * 9 / 12) >> 1);
  139.         REVDSP(i % 4);
  140.         _lupy = 240 - ((480 * 8 / 12) >> 1);
  141.         REVDSP(i % 3);
  142.         _lupy = 240 - ((480 * 6 / 12) >> 1);
  143.         REVDSP(i % 2);
  144.         MOS_rdpos( &b,&x,&y );exitf |= b;
  145.         _lupy = 240 - ((480 * 4 / 12) >> 1);
  146.         REVDSP(!(i % 3));
  147.         _lupy = 240 - ((480 * 2 / 12) >> 1);
  148.         REVDSP(!(i % 6));
  149.         MOS_rdpos( &b,&x,&y );exitf |= b;
  150.         _lupy = 240 - ((480 * 1 / 12) >> 1);
  151.         NOMDSP(!(i % 12));
  152.         _lupy = 240 - ((480 * 2 / 12) >> 1);
  153.         NOMDSP(!(i % 6));
  154.         _lupy = 240 - ((480 * 4 / 12) >> 1);
  155.         NOMDSP(!(i % 3));
  156.         MOS_rdpos( &b,&x,&y );exitf |= b;
  157.         _lupy = 240 - ((480 * 6 / 12) >> 1);
  158.         NOMDSP(i % 2);
  159.         _lupy = 240 - ((480 * 8 / 12) >> 1);
  160.         NOMDSP(i % 3);
  161.         _lupy = 240 - ((480 * 9 / 12) >> 1);
  162.         NOMDSP(i % 4);
  163.         _lupy = 240 - ((480 * 10 / 12) >> 1);
  164.         MOS_rdpos( &b,&x,&y );exitf |= b;
  165.         NOMDSP(i % 6);
  166.         _lupy = 240 - ((480 * 11 / 12) >> 1);
  167.         NOMDSP(i % 12);
  168.  
  169.     }while(1);
  170.  
  171.     free( p );
  172.     MOS_end();
  173.  
  174.     if( sdk )sdk_terminate( NULL, NULL, NULL );
  175.  
  176.     return 0;
  177. }
  178.